package demo.pattern.proxy.dynamic.jdk;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 1、作用：负责执行被代理类（目标类）的方法，可以在执行前后织入一段逻辑，相当于切面类
 * 2、组成
 * （1）持有目标类
 * （2）包含织入逻辑
 */
public class PayInvocationHandler implements InvocationHandler {

	// 1、目标类
	private Object targetObject;

	public PayInvocationHandler(Object targetObject){
		this.targetObject = targetObject;
	}

	// 2、织入逻辑
	private void afterPay() {
		System.out.println("支付之后");
	}

	private void beforePay() {
		System.out.println("支付之前");
	}

	// 3、执行方法
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		beforePay();
		Object result = method.invoke(targetObject, args);
		afterPay();
		return result;
	}

}
